//while循环，break和continue在循环中的作用
#include <stdio.h>
int main()
{
	int a;
	scanf("%d",&a);
	while(a<10)//当里面填的是1时候，会无限循环
	{
		if(a==1)
			break;//break的作用就是终止循环
		if(a==5)
			continue;//continue作用是跳过本次循环
//当输入5，或者是除了1以外的所有小于5的数的时候，运行界面就会进入死循环。
//why? 因为 continue 起作用以后，跳过了后面的a++；导致a一直为 5，一直死循环。
		printf("%d",a);
		a++;
	}
	printf("\n");//回车，优化运行界面，不然和后面的字符串连在一起了
//continue 好像也不好用啊，nonono，想想，当我们要读取一堆字符串，但是只要字母不要数字
//yes！此时此刻是不是，continue就可以跳过数字了呢，这就是用途之一

/*在此之前，先介绍以下 getchar 函数,getchar函数，就是用于读取字符的，每次只能读取一个字符，搭配的输出字符的函数是putchar*/
//getchar函数和scanf函数都是从缓冲区里得到数据的，scanf函数要等回车后才会读取数据，但是 getchar函数不是，它一旦看到缓冲区有数据就立马读取
//以下是例子

//错误例子
/*
	int cha=0;
	printf("please input a character:\n");
	cha=getchar();
	putchar(cha);
	getchar();
*///这是一段错误的例子，但是蛮有意思，可以运行分析一下
//TIPS：cha读取回车了。。。。。。。。但是在界面可不会打出'\n'，而是一个回车操作，不细看，真看不出来异常
	
	int cha=0;
	printf("please input a character:\n");
	getchar();//为什么要 getchar，yes！这就是关键所在，因为，我们刚才在输入a的值的时候，我们的操作时 a的值[回车]
				//能猜到吗！没错，就是要把 '\n'先读取了（清缓存）才能正常读取cha的值，不然 cha就读到了'\n'了
	cha=getchar();
	putchar(cha);
	printf("\n");

/*	char zfc[20]={0};
	scanf("%s",zfc[20]);
	while(int i=getchar(zfc[i])!='\n')
	{
		if(i<=57&&i>=48)
			continue;
		printf("%c",a);
	}*/
//不好意思，写错了，思绪混乱了
//我一开始的想法就是，用while循环加getchar的搭配，想要读取我设置的字符串zfc里的数值
//W+G的搭配是用来清理缓存的，[笑哭]即清理那些除了被zfc读取以外的字符

//输入字符串加空格加至少一个数字（最好多个连续的数字）
	char zfc[20]={0};//初始化，第一次定义数组时的20代表数组长度
	printf("please input characters:\n");
	scanf("%s",zfc);

/*	printf("%s",zfc[20]);*///写错了，啊啊啊，是低级错误，也是知识不牢固，虽然我们定义它为一个字符串
//但是本质上它是不是还是一个数组？那数组是不是就有下标，下标代表这什么？代表着数组某元素的位置
//因此这里的zfc[20],代表的是输出第 21个数组元素，所以这里一共犯了两个错误。下标是长度减一（20-1 = 19）
//第一次定义数组时的20代表长度
	printf("%s\n",zfc);//直接打数组名就可以了
	int O1=0;
	printf("please input numbers:\n");
	scanf("%d",&O1);
	printf("%d\n",O1);
	
	char ch='\0';//因为我们定义的ch为字符型，因此初始化也是字符，'\0'的ASCII就是等于 0
	while((ch=getchar())!='\n')//直到遇到回车符号，因为缓冲区没有任何字符，scanf函数必须等回车后才能读取
	//scanf（遇到空格停止读取，因此要清理后面的没用的字符（缓存）
	{
		;
	}
	//对比上面的 O1两者读取的数据的区别
	int O2=0;
	printf("please input numbers:\n");
	scanf("%d",&O2);
	printf("%d\n",O2);
	
	return 0;
}